home *** CD-ROM | disk | FTP | other *** search
- /* DSDRV.C Sample ADI Display driver */
-
-
- #include <stdio.h>
- #include <adi.h> /* ADI Interface codes */
- #include <dsadi.h> /* ADI Display driver codes */
-
- static struct comreg r; /* Register interface structure */
-
- /* Miscellaneous locals */
-
- static int fromx, fromy; /* FROM (x,y) coords for line */
- static int hilite; /* current highlight flag */
- static int boxno, curcolor; /* current menu box, color */
- static int printcmd = 1; /* command print flag */
- /* currently always enabled */
- static int lastcmd = 0; /* last command code received */
- static int lastrdrw = 0; /* last REDRAW status returned */
- static char com_buf[81]; /* display driver command buffer */
-
- #define MAXSTRING 120
-
- #ifdef MAXSTRING
- static char savechar[MAXSTRING]; /* Text string save area */
- static int charpos = 0; /* position in char save buffer */
- #endif
-
- main(argc,argv)
- int argc;
- char *argv[];
- {
- int cmdsave;
-
- printf("DSDEMO 1.3 - Test ADI Display Driver\n");
-
- if (printcmd)
- printf("Print command mode\n\n");
-
- while (1)
- {
- iwait(0x7A, &r, &r);
- #ifdef DEBUG
- printf("\n ** Display(%d): %d(%04x), %d(%04x), %d(%04x) **",
- r.code, r.arg1, r.arg1, r.arg2, r.arg2, r.arg3, r.arg3);
- #endif
- switch (cmdsave = r.code)
- {
- case INIT1:
- if (lsb(r.arg2) < INTLEVEL) /* Acceptable interface? */
- r.code = 0; /* Nope...return error */
- else
- r.code = 1; /* Yes...return OK status */
- r.arg1 = 620;
- r.arg2 = 350;
- r.arg3 = 750;
- break;
-
- case INIT2:
- r.arg1 = packbyte(37, 8);
- r.arg2 = packbyte(20, DM_CCECH | DM_HLEN | DM_GROK);
- r.arg3 = packbyte(3, 2);
- break;
-
- case INIT3:
- r.arg1 = 1;
- r.arg2 = 1;
- r.arg3 = packbyte(25, 80);
- break;
-
- case INIT4:
- r.arg1 = 0;
- r.arg2 = (EF_SYNC | EF_REDRAW | EF_CMD | EF_XPCMD);
- break;
-
- case INIT5:
- r.arg1 = 350;
- r.arg2 = 350;
- break;
-
- case TERM:
- if (printcmd)
- printf("TERM\n");
- break;
-
- case CLEAR:
- if (printcmd)
- printf("\nCLEAR SCREEN");
- r.arg1 = 0; /* no need to repaint anything */
- break;
-
- case DOT:
- if (printcmd)
- printf("\nDOT at (%d, %d)", r.arg1, r.arg2);
- break;
-
- case MOVE:
- hilite = r.arg3 & DR_HILITE;
- if (printcmd)
- printf("\nMOVE to (%d, %d), highlight = %c, non-draw = %c",
- r.arg1, r.arg2,
- hilite ? 'Y' : 'N',
- (r.arg3 & DR_NORDRW) ? 'Y' : 'N');
- break;
-
- case DRAW:
- if (printcmd)
- printf("\nDRAW to (%d, %d), color = %d %s",
- r.arg1, r.arg2, r.arg3, hilite ? "(highlighted)" : "");
- break;
-
- case FLOOD:
- if (printcmd)
- printf("\nFLOOD vertex (%d, %d), color = %d %s",
- r.arg1, r.arg2, r.arg3, hilite ? "(highlighted)" : "");
- break;
-
- case MARK:
- if (printcmd)
- printf("\nCURSOR at (%d, %d), type = %d",
- r.arg1, r.arg2, r.arg3);
- if (r.arg3 == 0 || r.arg3 == 3)
- r.arg1 = 0;
- else
- r.arg1 = 1;
- break;
-
- case CMARK:
- if (r.arg3 == 0 || r.arg3 == 3)
- r.arg1 = 0;
- else
- r.arg1 = 1;
- break;
-
- case CHAR:
- #ifdef MAXSTRING
- savechar[charpos++] = r.arg1; /* save char for later */
- #else
- if (printcmd)
- switch(boxno)
- {
- case -3:
- printf("\nCoordline char %c\n", r.arg1);
- break;
-
- case -2:
- printf("\nModeline char %c\n", r.arg1);
- break;
-
- case -1:
- printf("\nPrompt char %c\n", r.arg1);
- break;
-
- default:
- printf("\nMenu box %d: char %c\n", boxno, r.arg1);
- break;
- }
- #endif
- break;
-
- case ECHAR:
- #ifdef MAXSTRING
- savechar[charpos] = '\0'; /* terminate string */
- switch (boxno)
- {
- case -3:
- printf("\nCoordline: %s\n", savechar);
- break;
-
- case -2:
- printf("\nModeline: %s, curcolor = %d\n",
- savechar, curcolor);
- break;
-
- case -1:
- printf("\nPrompt: %s\n", savechar);
- break;
-
- default:
- printf("\nMenu box %d: %s\n", boxno, savechar);
- break;
- }
- charpos = 0; /* reset for next time */
- #else
- printf("\nECHAR:\n");
- #endif
- break;
-
- case MHLITE:
- printf("\nHIGHLIGHT menu box %d", boxno);
- #ifdef MAXSTRING
- r.arg1 = 0; /* Don't need to re-send chars */
- #else
- r.arg1 = 1; /* Send us the characters */
- #endif
- break;
-
- case MDHLITE:
- printf("\nDEHIGHLIGHT menu box %d", boxno);
- #ifdef MAXSTRING
- r.arg1 = 0; /* We don't want to see chars! */
- #else
- r.arg1 = 1; /* Send us the characters */
- #endif
- break;
-
- case MNUCUR:
- boxno = r.arg1; /* save box number for later */
- break;
-
- case TPROMPT:
- boxno = -1; /* set text cursor to prompt area */
- break;
-
- case QPLOT:
- r.code = 0; /* Sorry...can't do it */
- break;
-
- case RPEN:
- r.arg1 = 0; /* Sorry...can't do it */
- break;
-
- case GOTEXT:
- case GOTEXTU:
- printf("\nText mode:");
- break;
-
- case GOGRAPH:
- printf("\nGraphics mode:");
- break;
-
- case WRSPLIT:
- printf("\nPrompt char: %c", r.arg1);
- break;
-
- case MODELINE:
- boxno = -2; /* Flag modeline text */
- curcolor = r.arg2;
- break;
-
- case COORDLIN:
- boxno = -3; /* Flag coordline text */
- break;
-
- case SYNC:
- if (lastcmd != SYNC)
- printf("\nSync:");
- break;
-
- case REDRAW:
- lastrdrw = r.code = lastrdrw ^ 0x0001;
- printf("\nRedraw: Arg1 = %d, return = %d", r.arg1, r.code);
- break;
-
- case DSCOMAND: /* Display driver command */
- peek(r.arg3, r.arg2, &com_buf, min(r.arg1, sizeof com_buf));
- com_buf[sizeof com_buf - 1] = '\0'; /* insure terminator */
- printf("Display driver command: %s\n", com_buf);
- r.code = 1;
- break;
-
- case DSXPCOMD: /* Display driver transparent cmd */
- printf("Display driver transparent command\n");
- r.code = 1;
- break;
-
- default:
- printf("***** Unknown request code = %d *****\n", r.code);
- r.code = 0;
-
- } /* end SWITCH */
- lastcmd = cmdsave;
- } /* end WHILE */
- } /* end program */